package controlador;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.StringTokenizer;

import javax.swing.JOptionPane;

import modelo.Equipo;
import modelo.Jugador;
import modelo.Liga;

import vista.VentanaListaJugadores;
import vista.VistaEquipo;



public class ControladorVentanaEquipo implements ActionListener {

	private VistaEquipo ventEquipo;
	private Equipo equipo;
	private Liga lig;
	private File arch;
	int numero;
	int i;
	boolean guardar;

	public ControladorVentanaEquipo(Liga liga) {

		ventEquipo = new VistaEquipo();
		equipo = new Equipo();
		this.lig = liga;
		this.i = 0;
		this.numero = 1;
		this.guardar = false;
		ventEquipo.setLocationRelativeTo(null);
		ventEquipo.setVisible(true);
		ventEquipo.agregarListener(this);

	}


	public void leerArchivo(String nombreArchivo){
		
		Jugador jugador;
		try{
			File archivo= new File(nombreArchivo);

			if (archivo.exists()){
				// lector para el archivo
				FileReader fr = new FileReader(archivo);

				// transfiere datos del FileReader al BufferedReader
				BufferedReader br = new BufferedReader(fr);

				String lineaLeida;
				// mientras la linea (guardada en la variable lineaLeida) 
				//sea distinto de null;es decir se acaba el txt

				while((lineaLeida=br.readLine())!=null){
					// lee la linea instaceamos jugador y agregamos al equipo...
					jugador = SetearJugador(lineaLeida);

					// añadir jugador al equipo :
					equipo.agregarJugador(jugador);

				}

			}

		}
		catch(Exception ex){
			ex.printStackTrace();
			ventEquipo.mostrarMensaje("Se produjo un error archivo");
		}

	}

	public Jugador SetearJugador(String lineaLeida){

		try{
			StringTokenizer tok = new StringTokenizer(lineaLeida,":");

			String cedula, nombre, apellido, fechaNacimiento, posicionJugador;

			cedula = tok.nextToken();
			nombre = tok.nextToken();
			apellido = tok.nextToken();
			fechaNacimiento = tok.nextToken();
			posicionJugador = tok.nextToken();

			Jugador jugador;

			// creamos y metemos los datos de la persona (linea leida) 
			jugador = new Jugador(cedula, nombre, apellido, fechaNacimiento, posicionJugador);
			//devolvemos jugador con sus datos

			return jugador;
		}

		catch(Exception ex){
			ex.printStackTrace();
			ventEquipo.mostrarMensaje("Se produjo un error");
		}
		return null;
	}
	
	public void generarCodigo(){
		String codEquipo;

		
		if(lig.contarEquipo() > 0){
			
			codEquipo = "EQUIPO-" + numero;
			
		}else{
			codEquipo = "EQUIPO-" + numero;
		}
		
		ventEquipo.setCodigoEquipo(codEquipo);
		
		numero++;
	}


	@Override
	public void actionPerformed(ActionEvent e) {
		// TODO Auto-generated method stub
		ArrayList<Jugador> limpiar = null;
		limpiar = new ArrayList<Jugador>();

		// si selecciona el BOTON " CARGAR JUGADORES" entonces:
		if(e.getActionCommand().equalsIgnoreCase("CARGAR JUGADORES")){
			int mostrar = ventEquipo.getJfcAbrir().showOpenDialog(ventEquipo);
			
			equipo = new Equipo();// Instanceamos nuevo equipo
			// si seleccionamos la opcion "Aceptar"
			if (mostrar == ventEquipo.getJfcAbrir().APPROVE_OPTION){
				
				arch = ventEquipo.getJfcAbrir().getSelectedFile();
				leerArchivo(arch.toString());
				ArrayList<Jugador> jugadorTabla =  equipo.getJugadores();
				ventEquipo.setearListaJugadores(new VentanaListaJugadores(jugadorTabla));
				
				//si no es porque seleccionamos boton "Cancelar"
			}else if(mostrar == ventEquipo.getJfcAbrir().CANCEL_OPTION){
			    ventEquipo.limpiarVentana();   //Limpiar Tabla
			}
			// si seleccionamos el BOTON "GUARDAR"
		}else if(e.getActionCommand().equalsIgnoreCase("GUARDAR")){
			String codEquipo, nombEquipo, ciudad, nombEstadio;
			int anioFund;
			
			// Si es distinto de Cero;es decir los txtfield tienen informacion
			// y el vector de jugadores esta cargado...
			if(equipo.getJugadores().size() != 0){
				
				codEquipo = ventEquipo.getCodigoEquipo();
				nombEquipo = ventEquipo.getNombreEquipo();
				anioFund = ventEquipo.getAnnoFundacion();
				ciudad = ventEquipo.getCiudad();
				nombEstadio = ventEquipo.getnombreEstadio();
				// Set los datos del equipo
				equipo.setCodigoEquipo(codEquipo);
				equipo.setNombreEquipo(nombEquipo);
				equipo.setAnnoFundacion(anioFund);
				equipo.setCiudad(ciudad);
				equipo.setNombreEstadio(nombEstadio);
				
				// Agregar un equipo a la Liga
				lig.agregarEquipo(equipo);
				
				// limpiamos el JTABLE..
				ventEquipo.setearListaJugadores(new VentanaListaJugadores(limpiar));
				ventEquipo.limpiarVentana();        
				ventEquipo.setCodigoEquipo("");     //Limpia el Codigo
				this.guardar = true;
				
			}else
				ventEquipo.mostrarMensaje("Debe Cargar los JUGADORES del equipo!!!!");		

		}else if(e.getActionCommand().equalsIgnoreCase("NUEVO")){
			ventEquipo.setearListaJugadores(new VentanaListaJugadores(limpiar));
			ventEquipo.limpiarVentana();
			
			if(this.numero == lig.contarEquipo()+1){ 
				/*
				 * Como el Vector es menor a la variable numero siempre en una unidad, si esa condición no se
				 * cumple no se va a generar otro codigo*/
				generarCodigo();
			}
		}
		return;
	}

}

